package com.example.hello.service;

import com.example.hello.dto.AdvertisementDTO;
import com.example.hello.entity.Advertisement;
import com.github.pagehelper.PageInfo;

import java.util.List;

public interface AdvertisementService {
    /**
     * 创建广告
     * @param advertisementDTO 广告信息
     * @param userId 创建人ID
     * @return 创建结果
     */
    Advertisement createAdvertisement(AdvertisementDTO advertisementDTO, Long userId);
    
    /**
     * 更新广告
     * @param advertisementDTO 广告信息
     * @return 更新结果
     */
    boolean updateAdvertisement(AdvertisementDTO advertisementDTO);
    
    /**
     * 删除广告
     * @param adId 广告ID
     * @return 删除结果
     */
    boolean deleteAdvertisement(Long adId);
    
    /**
     * 获取广告详情
     * @param adId 广告ID
     * @return 广告信息
     */
    Advertisement getAdvertisementById(Long adId);
    
    /**
     * 获取所有广告
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 广告列表
     */
    PageInfo<Advertisement> getAllAdvertisements(Integer pageNum, Integer pageSize);
    
    /**
     * 获取当前有效的广告
     * @return 广告列表
     */
    List<Advertisement> getActiveAdvertisements();
    
    /**
     * 获取指定位置的当前有效广告
     * @param positionId 位置ID
     * @return 广告列表
     */
    List<Advertisement> getActiveAdvertisementsByPosition(Integer positionId);
    
    /**
     * 获取指定位置的当前有效广告（考虑每日时间段）
     * @param positionId 位置ID
     * @return 广告列表
     */
    List<Advertisement> getActiveAdvertisementsByPositionAndTimeSlot(Integer positionId);
    
    /**
     * 发布广告
     * @param adId 广告ID
     * @return 操作结果
     */
    boolean publishAdvertisement(Long adId);
    
    /**
     * 下线广告
     * @param adId 广告ID
     * @return 操作结果
     */
    boolean unpublishAdvertisement(Long adId);
    
    /**
     * 获取广告列表（带条件筛选）
     * @param advertisement 筛选条件
     * @param pageNum 页码
     * @param pageSize 每页大小
     * @return 广告列表
     */
    PageInfo<Advertisement> getAdvertisementList(Advertisement advertisement, Integer pageNum, Integer pageSize);
} 